package englishChicken;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;

public class Juego implements Comparable<Juego>{

	private String id;
	private String uid;
	private String nombre;
	private String creador;
	private String fechaCreacion;
	private List<String> padrinos;
	private Integer numJugadoresMaximos;
	private Integer numJugadoresMinimos;
	private Boolean juegoEnEquipo;
	private Integer gradoDeDificultad;
	private Integer tiempoDeJuegoMinimo;
	private Integer tiempoDeJuegoMaximo;
	private String materialesNecesarios;
	private String reglas;
	private List<String> eventos;
	private List<String> jugadores;
	private List<String> solicitudPadrino;
	
	public Juego() {
		nombre="vacio";
		creador="vacio";
		fechaCreacion="00/00/0000";
		numJugadoresMaximos=0;
		numJugadoresMinimos=0;
		juegoEnEquipo=false;
		gradoDeDificultad=0;
		tiempoDeJuegoMinimo=0;
		tiempoDeJuegoMaximo=0;
		materialesNecesarios="vacio";
		reglas="vacio";
		padrinos=new LinkedList<String>();
		jugadores=new LinkedList<String>();
		eventos=new LinkedList<String>();
		solicitudPadrino=new LinkedList<String>();
	}
	
	public Juego(String nombre, String creador, String fechaCreacion,
	List<String> padrinos, Integer numJugadoresMaximos, Integer numJugadoresMinimos,
	Boolean juegoEnEquipo, Integer gradoDeDificultad, Integer tiempoDeJuegoMinimo,
	Integer tiempoDeJuegoMaximo, String materialesNecesarios, String reglas, 
	List<String> eventos, List<String> jugadores, List<String> solicitudPadrino){
		this.nombre = nombre;
		this.creador = creador;
		this.fechaCreacion = fechaCreacion;
		this.padrinos.addAll(padrinos); 
		this.numJugadoresMaximos = numJugadoresMaximos;
		this.numJugadoresMinimos = numJugadoresMinimos;
		this.juegoEnEquipo = juegoEnEquipo;
		this.gradoDeDificultad = gradoDeDificultad;
		this.tiempoDeJuegoMinimo = tiempoDeJuegoMinimo;
		this.tiempoDeJuegoMaximo = tiempoDeJuegoMaximo;
		this.materialesNecesarios = materialesNecesarios;
		this.reglas = reglas;
		this.eventos.addAll(eventos);
		this.jugadores.addAll(jugadores);
		this.solicitudPadrino.addAll(solicitudPadrino);
	}
	
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getCreador() {
		return creador;
	}
	public void setCreador(String creador) {
		this.creador = creador;
	}
	public String getFechaCreacion() {
		return fechaCreacion;
	}
	public void setFechaCreacion(String fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}
	public List<String> getPadrinos() {
		return padrinos;
	}
	public void setPadrinos(List<String> padrinos) {
		this.padrinos = padrinos;
	}
	public List<String> getSolicitudPadrino(){
		return solicitudPadrino;
	}
	public void setPadrino(List<String> solicitarPadrino){
		this.solicitudPadrino=solicitarPadrino;
	}
	public void aceptarPadrino(String uid){
		Iterator<String> solPadIT=solicitudPadrino.iterator();
		while(solPadIT.hasNext()){
			String solPadAct=solPadIT.next();
			if(solPadAct.equals(uid)){
				solicitudPadrino.remove(solPadAct);
				padrinos.add(solPadAct);
				break;
			}
		}
	}
	public void denegarPadrino(String uid){
		Iterator<String> solPadIT=solicitudPadrino.iterator();
		while(solPadIT.hasNext()){
			String solPadAct=solPadIT.next();
			if(solPadAct.equals(uid)){
				solicitudPadrino.remove(solPadAct);
				break;
			}
		}
	}
	
	public void removeEvento(String uid){
		Iterator<String> evIT=eventos.iterator();
		while(evIT.hasNext()){
			Object evAct=evIT.next();
			if(evAct.equals(uid)){
				eventos.remove(evAct);
				break;
			}
		}
	}
	
	public void addEvento(String uid){
		if(eventos==null)eventos=new LinkedList<String>();
		eventos.add(uid);
	}
	
	public void addSolicitudPadrino(String uid){
		solicitudPadrino.add(uid);
	}
	
	public void removeSolicitudPadrino(String uid){
		denegarPadrino(uid);
	}
	
	public void addPadrino(String uid){
		padrinos.add(uid);
	}
	
	public void removePadrino(String uid){
		Iterator<String> padIT=padrinos.iterator();
		while(padIT.hasNext()){
			Object padAct=padIT.next();
			if(((String)padAct).equals(uid)){
				padrinos.remove(padAct);
				break;
			}
		}
	}
	
	public Integer getNumJugadoresMaximos() {
		return numJugadoresMaximos;
	}
	public void setNumJugadoresMaximos(Integer numJugadoresMaximos) {
		this.numJugadoresMaximos = numJugadoresMaximos;
	}
	public Integer getNumJugadoresMinimos() {
		return numJugadoresMinimos;
	}
	public void setNumJugadoresMinimos(Integer numJugadoresMinimos) {
		this.numJugadoresMinimos = numJugadoresMinimos;
	}
	public Boolean getJuegoEnEquipo() {
		return juegoEnEquipo;
	}
	public void setJuegoEnEquipo(Boolean juegoEnEquipo) {
		this.juegoEnEquipo = juegoEnEquipo;
	}
	public Integer getGradoDeDificultad() {
		return gradoDeDificultad;
	}
	public void setGradoDeDificultad(Integer gradoDeDificultad) {
		this.gradoDeDificultad = gradoDeDificultad;
	}
	public Integer getTiempoDeJuegoMinimo() {
		return tiempoDeJuegoMinimo;
	}
	public void setTiempoDeJuegoMinimo(Integer tiempoDeJuegoMinimo) {
		this.tiempoDeJuegoMinimo = tiempoDeJuegoMinimo;
	}
	public Integer getTiempoDeJuegoMaximo() {
		return tiempoDeJuegoMaximo;
	}
	public void setTiempoDeJuegoMaximo(Integer tiempoDeJuegoMaximo) {
		this.tiempoDeJuegoMaximo = tiempoDeJuegoMaximo;
	}
	public String getMaterialesNecesarios() {
		return materialesNecesarios;
	}
	public void setMaterialesNecesarios(String materialesNecesarios) {
		this.materialesNecesarios = materialesNecesarios;
	}
	public String getReglas() {
		return reglas;
	}
	public void setReglas(String reglas) {
		this.reglas = reglas;
	}
	public List<String> getEventos() {
		return eventos;
	}
	public void setEventos(List<String> eventos) {
		this.eventos = eventos;
	}
	public List<String> getJugadores() {
		return jugadores;
	}
	public void setJugadores(List<String> jugadores) {
		this.jugadores = jugadores;
	}

	public int compareTo(Juego arg0) {
		return this.nombre.compareTo(((Juego)arg0).getNombre());
	}

	public String getUid() {
		return uid;
	}

	public void setUid(String uid) {
		this.uid = uid;
	}
	
	public void addJugador(String uid){
		this.jugadores.add(uid);
	}
	
	public void removeJugador(String uid){
		Iterator<String> jugIT=jugadores.iterator();
		while(jugIT.hasNext()){
			Object jugAct=jugIT.next();
			if(jugAct.equals(uid)){
				jugadores.remove(jugAct);
				break;
			}
		}
	}

	public void setSolicitudPadrino(List<String> solicitudPadrino) {
		this.solicitudPadrino = solicitudPadrino;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
	
}
